/**
 * 
 */
package jmine.tec.utils.collection;

/**
 * Para que se insira um nó em uma <i>DropTree</i>, este nó deve implementar esta interface. O papel desta interface é verificar se no
 * momento de inserção os "escorrimentos" serão ou não permitidos para outros nós que passem através deste.
 * <p>
 * É recomendável que sejam implementados equals e hashCode para Dropable.
 * 
 * @author gigante
 * @param <T> o comparável
 */
public interface Dropable<T> {

    /**
     * Devolve a entidade associada a este dropable. Esta entidade deve ser a mesma usada na comparação entre nodes.
     * 
     * @return T
     */
    T getEntity();

    /**
     * Este método deve devolver true se T passado é "escorrível" a partir deste nó.
     * 
     * @param t o t a ser comparado vindo do outro nó.
     * @return true caso este nó permita que o outro escorra através dele, false c.c.
     */
    boolean dropThrough(T t);

}
